package api

import (
	"service/app/control"
	"service/app/dto"

	"github.com/gin-gonic/gin"
)

type AdminApi struct {
	BaseApi
	AdminC *control.AdminContr
}

var (
	Allocation_User  = 100020
	ADDPOLICY        = 100021
	ADDPOLICYLIST    = 100022
	GETALLPOLICY     = 100023
	ROLESBYID        = 100024
	ALLOCATION_ROLES = 100025
	//
	UNUSE_SYSLINK = 100026
)

// 挂载控制器
func CreateAdminApi() AdminApi {
	return AdminApi{
		BaseApi: *BaseApi{}.BaseApiInit(),
		AdminC:  control.NewAdminContr(),
	}
}

// @Tags system
// @Summary 本系统所有API列表
// @Router /api/v1/syslist [GET]
// @Success 200 {object} dto.SysList "成功"
// @Security ApiKeyAuth
func Getlist(r *gin.Engine) gin.HandlerFunc {
	return func(ctx *gin.Context) {
		// 创建并返回API列表
		var apiList dto.SysList
		// 获取所有路由信息
		routesInfo := r.Routes()
		ctx.JSON(200, gin.H{
			"message": "所有API列表",
			"data":    apiList.FilterSysList(&routesInfo),
		})
	}
}

// @Summary 删除未使用的API
// @Router /api/v1/admin/rmnotuselist [POST]
// @Tags system
// @Param object body dto.SysList  true  "系统URL  dto.SysList[]"
// @Security ApiKeyAuth
func (m AdminApi) AdminRmnotUseLink(ctx *gin.Context) {
	var SysListAc dto.SysListAc
	if err := m.BaseReqHandle(&IBaseApiParams{Ctx: ctx, Dto: &SysListAc, Valid: true}).GetBaseErr(); err != nil {
		m.Fail(ResponseJson{Msg: err.Error()})
		return
	}
	err := m.AdminC.AdminRmnotUseLinkC(&SysListAc)
	if err != nil {
		m.Fail(ResponseJson{Msg: err.Error(), Code: UNUSE_SYSLINK})
		return
	}
	m.Okay(ResponseJson{Msg: "删除未使用LINK 成功!"})
}

// @Tags admin
// @Summary 获取用户所属组
// @Description 获取用户所属组
// @Param  username path  int  true  "Group ID"
// @Router /api/v1/admin/roles/{username} [GET]
// @Security ApiKeyAuth
// func (m AdminApi) RolesByUsername(ctx *gin.Context) {
// 	var username dto.IresUriUsername
// 	err := m.BaseReqHandle(&IBaseApiParams{Ctx: ctx, ReqUri: true, Dto: &username}).GetBaseErr()
// 	if err != nil {
// 		m.Fail(ResponseJson{Msg: err.Error()})
// 		return
// 	}
// 	list, err := m.AdminC.RolesByUsernameC(username.Username)
// 	if err != nil {
// 		m.Fail(ResponseJson{Code: ROLESBYID, Msg: err.Error()})
// 		return
// 	}
// 	var res []string
// 	if len(*list) != 0 {
// 		res = *list
// 	} else {
// 		res = []string{}
// 	}
// 	m.Okay(ResponseJson{Msg: fmt.Sprintf("用户：%v 获取所属组成功! ", username.Username), Data: res})
// }

// @Tags admin
// @Summary 改变用户角色
// @Description casbin表分配分组成功
// @Router /api/v1/admin/allocation [post]
// @Param object body dto.CasbinGroup true "分配的参数"
// @Security ApiKeyAuth

// @Tags admin
// @Summary 改变用户角色组
// @Description 改变用户角色组
// @Router /api/v1/admin/roles_allow [post]
// @Param object body []string true "分配的参数"
// @Security ApiKeyAuth

// @Tags admin
// @Summary 获取所有列表
// @Description casbin表用户 ['admin',xxx]
// @Router /api/v1/admin/allrole [get]
// @Security ApiKeyAuth

// @Tags admin
// @Router /api/v1/admin/addpolicy [POST]
// @Summary 添加权限列表(单个)
// @Description casbin添加权限列表
// @Param object body dto.CasbinPolicy true "策略组"
// @Security ApiKeyAuth

// @Tags admin
// @Summary 添加权限列表(多个)
// @Description casbin添加权限列表
// @Router /api/v1/admin/addpolicylist [POST]
// @Param data body []dto.CasbinPolicy true "策略组"
// @Security ApiKeyAuth

// @Tags admin
// @Summary 获取用户权限(单个)
// @Description 获取用户权限(单个)
// @Router /api/v1/admin/role/{perm} [get]
// @Param object query dto.RoleName true "用户ID"
// @Security ApiKeyAuth

// @Tags admin
// @Summary 本系统所有权限列表
// @Description Role: v[0], Path: v[1], Method: v[2]
// @Param object query dto.ReqPaginat true "分页参数"
// @Router /api/v1/admin/allpolicy [GET]
// @Security ApiKeyAuth

// func (m AdminApi) AdminAddPolicy(ctx *gin.Context) {
// 	ok, err := global.Cb.Enforcer("lz", "admin")
// 	if err != nil {
// 		fmt.Print(err.Error())
// 	}
// 	fmt.Print(ok)
// }

// func (m AdminApi) AdminAddPolicy(ctx *gin.Context) {
// 	var policy dto.CasbinPolicy
// 	if err := m.BaseReqHandle(&IBaseApiParams{Ctx: ctx, ReqUri: true, Dto: &policy}).GetBaseErr(); err != nil {
// 		m.Fail(ResponseJson{Code: 400, Msg: err.Error()})
// 		return
// 	}
// 	m.Okay(ResponseJson{Msg: "创建casbin规则成功"})
// }

// @Tags admin
// @Summary 用户列表
// @Description 选传page,limit,获取casbin表用户
// @Param object query dto.ReqPaginat true "分页参数"
// @Router /api/v1/admin/list [GET]
// @Security ApiKeyAuth
// func (m AdminApi) AdminList(ctx *gin.Context) {
// 	// var list []mode.CasbinRule
// 	var pageOpt dto.ReqPaginat
// 	if err := m.BaseReqHandle(&IBaseApiParams{Ctx: ctx, Dto: &pageOpt, ReqQey: true}).GetBaseErr(); err != nil {
// 		m.Fail(ResponseJson{Msg: err.Error()})
// 		return
// 	}
// 	res := m.AdminC.GetList(&pageOpt)
// 	m.Okay(ResponseJson{Msg: "okay", Data: res})
// }
